package com.zmn.plat.services.interfaces.push.notice;

import java.util.Date;
import java.util.List;

import com.zmn.common.dto.VtDTO;
import com.zmn.plat.model.entity.push.notice.PushNoticeApp;
import com.zmn.plat.model.entity.push.notice.PushNoticeAppQuery;
import com.zmn.plat.model.entity.push.notice.PushNoticeAppSearchEngineerQuery;

/**
 * 描述: App 公告推送
 *
 * @author wangjie
 * @since 2020/3/21
 **/
public interface PushNoticeAppService {

    /**
     * 描述: 根据主键查询数据
     *
     * @param key
     *            主键id
     * @return com.zmn.plat.model.entity.push.notice.PushNoticeApp
     * @author wangjie
     * @since 2020/3/21
     **/
    PushNoticeApp findByKey(Integer key);

    /**
     * 描述: 查询有效的app公告数据
     *
     * @param putType
     *            推送类型
     * @param nowTime
     *            时间吗
     * @param status
     *            状态
     * @param putApp
     *            推送app
     * @return com.zmn.plat.model.entity.push.notice.PushNoticeApp
     * @author wangjie
     * @since 2020/4/1
     **/
    PushNoticeApp findPushByValidData(Integer putType, Date nowTime, Integer status, Integer putApp);

//    /**
//     * 描述: 获取全部工程师分组 使用了缓存
//     * 兼容（待删除）
//     */
//    List<VtDTO> listAllEngineerGroup();

    /**
     * 描述: 根据条件查询数据
     *
     * @param query
     *            查询对象
     * @return java.util.List<com.zmn.plat.model.entity.push.notice.PushNoticeApp>
     * @author wangjie
     * @since 2020/3/21
     **/
    Integer countPageByQuery(PushNoticeAppQuery query);

    /**
     * 描述: 根据条件查询数据
     *
     * @param query
     *            查询对象
     * @return java.util.List<com.zmn.plat.model.entity.push.notice.PushNoticeApp>
     * @author wangjie
     * @since 2020/3/21
     **/
    List<PushNoticeApp> listPageByQuery(PushNoticeAppQuery query);

    /**
     * 描述: 查询出小于time，并且状态为 status 的数据
     *
     * @param time
     *            传入时间 默认 nowTime
     * @param status
     *            数据状态 默认 启用 2
     * @return java.util.List<com.zmn.plat.model.entity.push.notice.PushNoticeApp>
     * @author wangjie
     * @since 2020/3/21
     **/
    List<PushNoticeApp> listPushNoticeLessTimeAndStatus(Date time, Integer status);

    /**
     * 描述: 查询推送工程师
     *
     * @param pushNoticeAppSearchEngineerQuery
     *            查询推送工程师
     * @return java.util.List<java.lang.Integer>
     * @author wangjie
     * @since 2020/3/31
     **/
    List<Integer> listPushNoticeToEngineer(PushNoticeAppSearchEngineerQuery pushNoticeAppSearchEngineerQuery);

    /**
     * 描述: 根据key修改
     *
     * @param pushNoticeApp
     *            app公告对象 对象中必须有key值
     * @param operator
     *            操作人
     * @author wangjie
     * @since 2020/3/21
     **/
    void updateByKey(PushNoticeApp pushNoticeApp, String operator);

    /**
     * 描述: 修改排序号
     *
     * @param pushNoticeKey
     *            主键key
     * @param sort
     *            排序号
     * @param operator
     *            操作人
     * @author wangjie
     * @since 2020/3/21
     **/
    void updateSortByKey(Integer pushNoticeKey, Integer sort, String operator);

    /**
     * 描述: 通过主键集合修改状态
     *
     * @param pushNoticeKeys
     *            主键key
     * @param status
     *            状态值
     * @param operator
     *            操作人
     * @author wangjie
     * @since 2020/3/21
     **/
    void updateStatusByKeys(List<Integer> pushNoticeKeys, Integer status, String operator);

    /**
     * 描述: 新增数据
     *
     * @param pushNoticeApp
     *            app公告对象
     * @param operator
     *            操作人
     * @return java.lang.Integer 新增后的id
     * @author wangjie
     * @since 2020/3/
     **/
    Integer insert(PushNoticeApp pushNoticeApp, String operator);

}
